package com.example.neusoft215gdh.androidpro_21.MyImage;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;
public class CircleImageView extends AppCompatImageView {
   private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);
   private Bitmap mRawBitmap;
   private BitmapShader mShader;
   private Matrix mMatrix = new Matrix();

           public CircleImageView(Context context, AttributeSet attrs) {
               super(context, attrs);
           }

           @Override
    protected void onDraw(Canvas canvas) {
               Bitmap rawBitmap = getBitmap(getDrawable());
               if (rawBitmap != null){
                      int viewWidth = getWidth();
                        int viewHeight = getHeight();
                       int viewMinSize = Math.min(viewWidth, viewHeight);
                        float dstWidth = viewMinSize;
                       float dstHeight = viewMinSize;
                      if (mShader == null || !rawBitmap.equals(mRawBitmap)){
                                mRawBitmap = rawBitmap;
                               mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
                          }
                        if (mShader != null){
                               mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight());
                               mShader.setLocalMatrix(mMatrix);
                            }
                        mPaintBitmap.setShader(mShader);
                        float radius = viewMinSize / 2.0f;
                        canvas.drawCircle(radius, radius, radius, mPaintBitmap);
                    } else {
                        super.onDraw(canvas);
                    }
            }

            private Bitmap getBitmap(Drawable drawable){
                if (drawable instanceof BitmapDrawable){
                        return ((BitmapDrawable)drawable).getBitmap();
                    } else if (drawable instanceof ColorDrawable){
                        Rect rect = drawable.getBounds();
                        int width = rect.right - rect.left;
                        int height = rect.bottom - rect.top;
                        int color = ((ColorDrawable)drawable).getColor();
                        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                        Canvas canvas = new Canvas(bitmap);
                        canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));
                        return bitmap;
                    } else {
                        return null;
                    }
            }
}